package com.elai.tags.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.elai.common.utils.DateUtils;
import com.elai.tags.domain.BaseUserTagsLevelDO;
import com.elai.tags.mapper.BaseUserTagsLevelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.elai.tags.mapper.BaseUserTagsMapper;
import com.elai.tags.domain.BaseUserTagsDO;
import com.elai.tags.service.BaseUserTagsService;

/**
 * 用户标签Service业务层处理
 *
 * @author elai
 * @date 2021-06-27
 */
@Service
public class BaseUserTagsServiceImpl implements BaseUserTagsService
{
    @Autowired
    private BaseUserTagsMapper baseUserTagsMapper;

    @Autowired
    private BaseUserTagsLevelMapper baseUserTagsLevelMapper;

    /**
     * 查询用户标签
     *
     * @param id 用户标签ID
     * @return 用户标签
     */
    @Override
    public BaseUserTagsDO selectBaseUserTagsById(Long id)
    {
        return baseUserTagsMapper.selectBaseUserTagsById(id);
    }

    /**
     * 查询用户标签列表
     *
     * @param baseUserTags 用户标签
     * @return 用户标签
     */
    @Override
    public List<BaseUserTagsDO> selectBaseUserTagsList(BaseUserTagsDO baseUserTags)
    {
        return baseUserTagsMapper.selectBaseUserTagsList(baseUserTags);
    }

    /**
     * 新增用户标签
     *
     * @param baseUserTags 用户标签
     * @return 结果
     */
    @Override
    public int insertBaseUserTags(BaseUserTagsDO baseUserTags, JSONObject object,JSONArray resultArray)
    {
        baseUserTags.setCreateTime(DateUtils.getNowDate());
        baseUserTags.setUpdateTime(DateUtils.getNowDate());
        int result= baseUserTagsMapper.insertBaseUserTags(baseUserTags);
        JSONArray array=object.getJSONArray("tagsLevelList");
        List<BaseUserTagsLevelDO> tagsLevelList=new ArrayList<BaseUserTagsLevelDO>();
        if(result>0){
            for(int i=0;i<array.size();i++){
                JSONObject tagsLevel=(JSONObject)array.get(i);
                BaseUserTagsLevelDO levelDo=JSONObject.parseObject(tagsLevel.toJSONString(),BaseUserTagsLevelDO.class);
                levelDo.setTagsId(baseUserTags.getId());
                levelDo.setTagLevelRule(tagsLevel.toJSONString());
                if(resultArray!=null) {
                    for (int j = 0; j < resultArray.size(); j++) {
                        JSONObject level = (JSONObject) resultArray.get(j);
                        if (level.getLongValue("tagsLevel") == levelDo.getTagsLevel()) {
                            levelDo.setResultNum(level.getLongValue("levelCount"));
                        }
                    }
                }
                levelDo.setResultTime(DateUtils.getNowDate());
                baseUserTagsLevelMapper.insertBaseUserTagsLevel(levelDo);
                tagsLevelList.add(levelDo);
            }
        }
        baseUserTags.setTagsLevelList(tagsLevelList);
        return result;
    }

    /**
     * 修改用户标签
     *
     * @param baseUserTags 用户标签
     * @return 结果
     */
    @Override
    public int updateBaseUserTags(BaseUserTagsDO baseUserTags,JSONArray resultArray)
    {
        baseUserTags.setUpdateTime(DateUtils.getNowDate());
        BaseUserTagsLevelDO param=new BaseUserTagsLevelDO();
        param.setTagsId(baseUserTags.getId());
        List<BaseUserTagsLevelDO> levelList=baseUserTagsLevelMapper.selectBaseUserTagsLevelList(param);
        levelList.stream().forEach(level->{
            level.setResultTime(DateUtils.getNowDate());
            if(resultArray!=null) {
                for (int j = 0; j < resultArray.size(); j++) {
                    JSONObject levelObj = (JSONObject) resultArray.get(j);
                    if (levelObj.getLongValue("tagsLevel") == level.getTagsLevel()) {
                        level.setResultNum(levelObj.getLongValue("levelCount"));
                    }
                }
            }
            baseUserTagsLevelMapper.updateBaseUserTagsLevel(level);
        });
        baseUserTags.setTagsLevelList(levelList);
        return baseUserTagsMapper.updateBaseUserTags(baseUserTags);
    }

    /**
     * 批量删除用户标签
     *
     * @param ids 需要删除的用户标签ID
     * @return 结果
     */
    @Override
    public int deleteBaseUserTagsByIds(Long[] ids)
    {
        return baseUserTagsMapper.deleteBaseUserTagsByIds(ids);
    }

    /**
     * 删除用户标签信息
     *
     * @param id 用户标签ID
     * @return 结果
     */
    @Override
    public int deleteBaseUserTagsById(Long id)
    {
        return baseUserTagsMapper.deleteBaseUserTagsById(id);
    }
}
